/*
 * automato_finito.c
 *
 *  Created on: Sep 19, 2011
 *      Author: Fernando
 */

#include "automato_finito.h"

AutomatoFinito inicializarAutomatoFinito(int estadoInicial, int totalEstados, int* pTabelaTransicoes) {
	AutomatoFinito af;
	af.estadoAtual = estadoInicial;
	af.totalEstados = totalEstados;
	af.pTabelaTransicoes = pTabelaTransicoes;
	return af;
}

int proximoEstadoAutomatoFinito(AutomatoFinito* pAutomato, unsigned char caractereEntrada) {
	int estadoAtual = pAutomato->estadoAtual;
	int indiceTabela = estadoAtual * 256 + (int) caractereEntrada;
	int proximoEstado = pAutomato->pTabelaTransicoes[indiceTabela];

	pAutomato->estadoAtual = proximoEstado;
	return proximoEstado;
}
